/**
 * 用于创建唯一的值。基于这个唯一的特性，我们就可以实现私有属性。
 * 不再用 name 和 age 作为私有属性名了，而是用 Symbol 生成唯一的值来作为名字
 */
let Cat = (function () {
  const nameSymbol = Symbol("name");
  const ageSymbol = Symbol("age");

  class Cat {
    constructor(name, age) {
      this[nameSymbol] = name;
      this[ageSymbol] = age;
    }

    hello() {
      return "I'm " + this[nameSymbol] + ", " + this[ageSymbol] + " years old";
    }
  }

  return Cat;
})();

let cat = new Cat("ppt", 1);
console.log("[ cat.hello ] >", cat.hello());
